今天在写代码的时候遇到一种代码,在处理function的参数arguments的时候,错误的把看成一个Array处理了,尝试着去调用Array对应的原型对象的slice属性,结果报undifined错误,可见arguments并非Array的孩子。怀着这个疑问,查看了arguments的constructor,发现arguments的constructor竟然是Object.
那么如果我们需要对arguments进行slice,解决方式有很多,原理都是讲arguments转化成数组就解决了,但是问题是,这样的描述,用什么样的代码写最为优美。选择call()方法是比较合适的,call(obj,[方法参数])方法使用来描述用别的对象来替代当前对象且调用对应的方法,例如,
emptyArray = [], slice = emptyArray.slice
alert(arguments.constructor)
alert(slice.call(arguments,1));//slice是emptyArray对象的,这里相当于把emptyArray替换成arguments来调用slice。
遍历出数组中的所有元素,并对元素进行处理
var args = [1,2,3];
args.forEach(function(arg){alert(arg)})
|| 和 &&
alert(1||2)//1
alert(""||2)//2
/*
左边||右边 ,表示不是选左边就是选右边,左边没有(false),那么留下来的就是右边,如果左边有了(true)留下来的就是左边。[选了右边,就把||之前的一起擦掉,选了左边就把右边擦掉]
*/
alert(1&&2);//2
alert(""&&2);//""
/*
与||正好相反
*/
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。